██████╗ ███████╗████████╗██╗██████╗ ███████╗██████╗ ██╗ █████╗
██╔══██╗██╔════╝╚══██╔══╝██║██╔══██╗██╔════╝██╔══██╗██║██╔══██╗
██████╔╝█████╗ ██║ ██║██████╔╝█████╗ ██║ ██║██║███████║
██╔══██╗██╔══╝ ██║ ██║██╔═══╝ ██╔══╝ ██║ ██║██║██╔══██║
██║ ██║███████╗ ██║ ██║██║ ███████╗██████╔╝██║██║ ██║
╚═╝ ╚═╝╚══════╝ ╚═╝ ╚═╝╚═╝ ╚══════╝╚═════╝ ╚═╝╚═╝ ╚═╝
- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
RC5
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
top
In mwcqcrittografia lmwcg'mwcwRC5 è un mwdaalgoritmo di mwdqcifratura a blocchi progettato da mwdgRonald Rivest nel mwdw1994. È degno di nota per la sua semplicità e perché una sua evoluzione (l'mweaRC6) è stato fra i candidati per l'mweqAdvanced Encryption Standard.
Contents
• Note
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
Descrizione
Al contrario della maggior parte degli algoritmi di cifratura a blocchi, nei quali è parametrizzabile al più una delle costanti dell'elaborazione, solitamente la mwfqdimensione della chiave, nell'RC5 tutti i mwfgparametri di base sono variabili: è possibile infatti scegliere fra diverse mwfwdimensioni del blocco (32, 64 o 128 mwgabit), della chiave (da 0 a 2048 bit) e del numero di passaggi o mwgqrounds (da 0 a 255). Non tutti i valori ammessi portano ad un risultato utilizzabile; ad esempio, se la dimensione della chiave o il numero di passaggi è 0, praticamente non avviene nessuna elaborazione. La combinazione suggerita dall'autore è di 12 passaggi con una chiave da 128 bit e con blocchi da 64 bit.
Una delle operazioni centrali dell'RC5 consiste in una rotazione dei bit dei dati di un valore dipendente dal dato di ingresso; si può anche affermare che il cifrario stesso nacque proprio per studiare le proprietà crittografiche di questa operazione. In ogni ciclo si effettuano anche operazioni di mwgwOR esclusivo e addizioni mwhamodulari, organizzate in una mwhqrete di Feistel esprimibili con poche righe di codice.
Il mwhwgestore della chiave è, invece, più complesso: esso espande la chiave utilizzando una funzione monodirezionale che utilizza le espansioni binarie di mwiamwiqe e della mwigsezione aurea come sorgenti di "numeri dalle proprietà non nascoste" (o mwiwnothing up my sleeve numbers" in mwjainglese).
La semplicità dell'algoritmo unità alla novità delle rotazioni dipendenti dai dati hanno fatto dell'RC5 un interessante oggetto di studi per i mwjgcrittanalisti.
RC5 orientato alla word
La caratteristica principale dell'RC5 è quella di essere un algoritmo orientato all'architettura del computer sul quale è in esecuzione. In particolare, tutte le elaborazioni sono effettuate su stringhe di lunghezza pari a quella della mwkqmwkgword della mwkwmacchina, ossia dipendono dall'mwlaarchitettura del computer su cui sta girando il mwlqcifrario, con ovvi vantaggi in termini di prestazioni: le operazioni su stringhe di lunghezza pari a quella della mwlgword del computer richiedono meno cicli macchina). Un'altra caratteristica è quella di usare istruzioni "base", comuni alla maggior parte dei mwlwprocessori, in quanto opera su dati la cui lunghezza è identica a quella mwmaword, anche se la stessa può essere di lunghezza diversa (come già detto, la lunghezza di una mwmqword può variare in funzione dell'architettura del computer), ed anche rotazioni dipendenti dai dati.
L'RC5 è un algoritmo che usa poca mwmwmemoria, quindi risulta adatto per dispositivi quali le mwnasmart card, ed è semplice da analizzare ed mwnqimplementare; infatti l'RC5 è stato utilizzato in diversi mwngprodotti, ad esempio le librerie crittografiche BSAFE e JSAFE di mwoqRSA Security. ho tolto S/MAIL perché non si capisce se è: il servizio S-Mail, un'abbreviazione per secure mail ecc... Dobbiamo anche ricordare che RC5 si basa su una mwogmacchina con un'architettura mwowmwpalittle-endian (il bit meno significativo è posto a destra; tipicamente processori Intel); in realtà può funzionare anche su una macchina con architettura mwpqbig endian (ovvero, tipicamente processori Motorola), ma il procedimento d'espansione della chiave ha bisogno di alcune modifiche.
Si può affermare che l'RC5 è una famiglia di cifrari dove ogni membro è indicato come mwpwRC5-w/r/b, con le lettere w/r/b che indicano i seguenti parametri:
• mwqgw, mwqwmwraword, denota la lunghezza della mwrqword del computer (mwrg32, mwrw64 o mwsa128 bit). La dimensione del blocco è pari al doppio della lunghezza della mwsqword, o mwsg2w, mentre tutte le funzioni interne dell'RC5 ricevono in ingresso e forniscono in uscita dati lunghi esattamente mwsww bit.
• mwtqr, mwtgmwtwround, indica il numero di passaggi che varia da 0 a 255 (anche se, come è stato specificato, utilizzare 0 passaggi equivale a non eseguire il processo di cifratura per cui il numero minimo di passaggi è 1). L'RC5 utilizza un passaggio iniziale differente da tutti gli altri utilizzati durante il processo di cifratura; ogni passaggio utilizza 2 sottochiavi. Dalla chiave iniziale sono generate 2 sottochiavi per ogni passaggio comune, quindi mwua2r, e 2 sottochiavi per la fase iniziale, per un totale di mwuq2r+2.
• mwuwb, mwvamwvqbyte, è la lunghezza della chiave espressa in mwvgbyte, che varia da 0 a 255 (anche qui, utilizzare una chiave di 0 byte equivale a non effettuare nessuna operazione di cifratura). Il mwvwgestore della chiave genera 2r+2 sottochiavi ognuna lunga mwwaw bit.
Perciò quando si scrive RC5 w/r/b significa che si sta indicando il RC5 che lavora su 2 mwwgword di mwwww bit con un numero di passaggi pari ad mwxar e con una chiave lunga mwxqb byte.
Le operazioni dell'RC5
Come detto, le operazioni eseguite dall'RC5 sono tutte operazioni di mwyaw bit, e sono le seguenti:
• la somma a+b modulo mwyw2w;
• la sottrazione a-b modulo mwzq2w;
• mwzwa XOR mwaab bit a bit
• mwaga << mwawb, ossia rotazione a sinistra di mwbab bit applicato alla word mwbqa
• mwbwa >> mwcab, ossia rotazione a destra di mwcqb bit applicato alla word mwcga
La prima operazione da vedere è la mwdaschedulazione della chiave. Partendo da una chiave di mwdqb byte, dove mwdgb è un parametro di RC5, immaginiamo che questi byte siano memorizzati in un mwdwarray mweaK:
K[0,….,b-1]
A partire da questa chiave l'algoritmo produce un altro array denominato mwewS, l'array delle sottochiavi, perché in totale occorrono mwfa2r+2 sottochiavi:
S[0,….,2r+1]
In effetti, per produrre mwfwS, che verrà poi usato nella fase di cifratura, occorre effettuare una conversione dai byte per ottenere delle mwgaword, dopo di che su queste ultime saranno eseguite delle operazioni per andare ad aggiornare il contenuto di mwgqS(funzione di mescolamento, o mwggMixing Function). Questo array intermedio è denominato mwgwL e si ottiene dall'array mwhaK. Su un computer ad architettura mwhqlittle-endian viene semplicemente copiato il contenuto dell'array mwhgK nell'array mwhwL; in totale, mwiaL avrà mwiqc locazioni, dove mwigc=(8*b)/w. Nel caso in cui mwiw8*b non dovesse essere un multiplo di mwjaw, saranno aggiunti degli "zero" per completare il valore (operazione di mwjqpadding).
Algoritmo di schedulazione
L'algoritmo di schedulazione della chiave è diviso in 2 fasi:
1. la prima fase inizializza l'array mwkgS (quello finale) con dei valori che dipendono da alcune costanti definite mwkwPw e mwlaQw, di mwlqw bit. mwlgPw è l'mwlwespansione binaria a mwmaw bit del mwmqnumero di Nepero (e=2,71828182459045... in decimale): in particolare mwmgPw = Odd[(e-2)2w] dove mwmwOdd(x) indica l'intero dispari più vicino ad mwnax. mwnqQw è l'espansione binaria a mwngw bit del mwnwrapporto aureo (φ=1,6180339887... in decimale): in particolare, mwoaQw = Odd[(φ-1)2w]. Questi valori sono già stati calcolati e memorizzati in una tabella, ed il loro valore dipende da mwoqw. In seguito l'array mwogS viene modificato usando l'array mwowL, che contiene la chiave. In particolare, nella prima locazione di mwpaS viene posto mwpqPw, e poi, dalla locazione 1 fino a mwpg2r+1, viene aggiornata la locazione mwpwS[i] andando a sommare la costante mwqaQw alla locazione immediatamente precedente. La chiave non è stata ancora usata.
2. La seconda fase, chiamata mwqgMixing Function, sfrutta l'array mwqwL, nel quale è stata copiata in precedenza la chiave: viene eseguito un ciclo che è eseguito 3 volte il numero massimo di elementi contenuto tra mwrac e mwrq2r+2. Ad ogni ciclo mwrgS e mwrwL vengono aggiornati. Vengono usati due puntatori mwsai e mwsqj: mwsgS è aggiornato in base al valore attuale di mwswS[i] e a 2 mwtaword a mwtqw bit denominate mwtgX e mwtwY, inizialmente poste a 0, e poi con una rotazione a sinistra di 3 locazioni; mwuaL viene aggiornato in base al valore attuale di mwuqL[j] e a 2 mwugword a mwuww bit denominate mwvaX e mwvqY e poi una rotazione che dipende dai dati, cioè la rotazione dipende dal valore di mwvgX+Y. Dopo di che, ogni volta, gli indici mwvwi e mwwaj vengono incrementati.
In pratica l'array mwwgS che era stato inizializzato con le costanti mwwwPw e mwxaQw subisce degli aggiornamenti che dipendono dall'array mwxqL, array di mwxgc mwxwword ottenuto dalla chiave iniziale. Il risultato finale equivale ad un array mwyaS aggiornato, array di mwyq2r+2 locazioni, ognuna di mwygw bit. Quindi, la fase di schedulazione della chiave prende in input una chiave di mwywb byte e produce mwza2r+2 sottochiavi, ognuna di mwzqw bit.
Fase di cifratura
La fase di cifratura parte da un mw0ablocco di 2 mw0qword di mw0gw bit e produce un altro blocco di 2 mw0wword di mw1aw bit, tramite mw1qr passaggi. Vi è un passaggio iniziale che usa 2 sottochiavi e poi ogni passaggio successivo utilizza altre 2 chiavi sottochiavi, per un totale di mw1g2r+2. Nell'algoritmo, in pratica, sono svolte operazioni di addizione su mw1wword di mw2aw bit, operazioni di XOR e rotazioni dei bit. Il testo in chiaro è memorizzato in 2 mw2qword denominate mw2gA e mw2wB, ognuna di mw3aw bit, in cui viene restituito anche l'output dell'algoritmo.
Si aggiorna mw3gA con la prima sottochiave e mw3wB con la seconda sottochiave (le prime 2 sottochiavi utilizzate), dopo di che vengono eseguiti mw4ar passaggi in cui vengono usate 2 diverse sottochiavi mw4qS[2i] e mw4gS[2i+1] (altre mw4w2r sottochiavi). Durante un singolo passaggio viene eseguita prima l'operazione di XOR bit a bit tra mw5aA e mw5qB, poi una rotazione di mw5gB, ed infine una addizione con la sottochiave mw5wS[2i] col il risultato finale che aggiorna mw6aA. Inoltre, nel passaggio viene eseguito anche uno XOR bit a bit tra mw6qB ed mw6gA, poi viene eseguita una rotazione a sinistra che dipende dal valore di mw6wA, ed infine una somma con la sottochiave mw7aS[2i+1], aggiornando il valore di mw7qB.
A differenza del DES e dei mw8acifrari di Feistel, nell'RC5 entrambe le metà del blocco dati sono aggiornate nel passaggio, sia la parte mw8qA sia la parte mw8gB. Nei cifrari di Feistel invece una parte è ricopiata e si aggiorna l'altra metà del blocco. La decifratura è l'operazione inversa della cifratura: infatti sono svolti prima gli mw8wr passaggi a partire dall'ultimo al primo e poi gli ultimi 2 aggiornamenti. L'unica differenza tra la fase di cifratura e quella di decifratura è che in quest'ultima le operazioni sono di sottrazione invece che di somma; restano invariate le operazioni di XOR e di rotazione.
Le caratteristiche dell'RC5
Le caratteristiche salienti di RC5 sono:
1. le rotazioni sono dipendenti dai dati e non sono fisse; questo fatto complica gli attacchi di mw-acrittanalisi differenziale e mw-qlineare, proprio perché l'ammontare dello mw-gshift dipende dal dato;
2. in ogni passaggio le operazioni coinvolgono tutto il blocco, a differenza di quello che accadeva nel DES;
3. l'RC5 è una famiglia che dipende dai parametri mw-qw/r/b, quindi per specificare un particolare cifrario dobbiamo indicare tali valori.
Note
cite-note-biryukov-11. Biryukov A. and Kushilevitz E. (1998). Improved Cryptanalysis of RC5. EUROCRYPT 1998.
Voci correlate
Collegamenti esterni
• mwaqsIl documento con cui Rivest presenta l'RC5 (PDF), su people.csail.mit.edu. URL consultato il 3 maggio 2019 (archiviato dall'url originale il 31 marzo 2019).
• mwaq0Corso RC5, su dia.unisa.it.
• mwareCosa sono RC5 ed RC6?, su rsasecurity.com (archiviato dall'url originale il 29 dicembre 2006).
• mwarmAlgoritmo di cifratura RC5, su islab.oregonstate.edu. URL consultato il 6 dicembre 2006 (archiviato dall'url originale il 1º settembre 2006).
• mwaruRC5-CTS cipher (TXT), su ietf.org.